// StrUtil类的实现
// 提供字符串处理的实用工具函数

#include "StrUtil.h"
#include <string>
#include <cctype>

// 去除字符串前后的空白字符
std::string StrUtil::trim(const std::string& str) {
    if (str.empty()) {
        return str;
    }
    
    // 找到第一个非空白字符的位置
    size_t start = 0;
    while (start < str.size() && std::isspace(static_cast<unsigned char>(str[start]))) {
        ++start;
    }
    
    // 如果全是空白字符，返回空字符串
    if (start == str.size()) {
        return "";
    }
    
    // 找到最后一个非空白字符的位置
    size_t end = str.size() - 1;
    while (end > start && std::isspace(static_cast<unsigned char>(str[end]))) {
        --end;
    }
    
    // 返回裁剪后的子字符串
    return str.substr(start, end - start + 1);
}


// 检查字符串是否以指定前缀开头
bool StrUtil::startWith(const std::string& str, const std::string& prefix) {
    if (prefix.empty()) {
        return true; // 空前缀视为匹配所有字符串
    }
    
    if (str.size() < prefix.size()) {
        return false; // 字符串比前缀短，不匹配
    }
    
    // 比较字符串前缀
    return str.compare(0, prefix.size(), prefix) == 0;
}

// 检查字符串是否以指定后缀结尾
bool StrUtil::endWith(const std::string& str, const std::string& suffix) {
    if (suffix.empty()) {
        return true; // 空后缀视为匹配所有字符串
    }
    
    if (str.size() < suffix.size()) {
        return false; // 字符串比后缀短，不匹配
    }
    
    // 比较字符串后缀
    return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
}

// 检查字符串是否包含指定子字符串
bool StrUtil::contains(const std::string& str, const std::string& substr) {
    if (substr.empty()) {
        return true; // 空子字符串视为包含在任何字符串中
    }
    
    return str.find(substr) != std::string::npos;
}